Complex Date Formats হ্যান্ডল করা

Java Technologies - জ্যাকসন (Jackson) - Date এবং Time হ্যান্ডল করা
225

জ্যাকসন (Jackson) ব্যবহার করে কমপ্লেক্স ডেট ফরম্যাট হ্যান্ডল করা খুব সহজ, কারণ এটি ডেট ফরম্যাটিং এবং কাস্টমাইজেশনের জন্য বিভিন্ন বিল্ট-ইন এবং কাস্টম পদ্ধতি প্রদান করে।

নিচে বিভিন্ন পদ্ধতি এবং উদাহরণ দিয়ে বিষয়টি ব্যাখ্যা করা হলো:


1. Default Date Handling

জ্যাকসন ডিফল্টভাবে java.util.Date এবং অন্যান্য ডেট টাইপকে ISO-8601 ফরম্যাটে (যেমন, yyyy-MM-dd'T'HH:mm:ss.SSSZ) Serialize এবং Deserialize করে।

উদাহরণ: Default Date Handling

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Date;

public class DefaultDateExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Date Serialization
        Date currentDate = new Date();
        String json = mapper.writeValueAsString(currentDate);
        System.out.println("Serialized Date: " + json);

        // Date Deserialization
        Date deserializedDate = mapper.readValue(json, Date.class);
        System.out.println("Deserialized Date: " + deserializedDate);
    }
}

আউটপুট:

"2024-12-21T09:30:45.123+0000"

2. Custom Date Formats

@JsonFormat Annotation ব্যবহার করে

@JsonFormat অ্যানোটেশন ব্যবহার করে নির্দিষ্ট ডেট ফরম্যাট নির্ধারণ করা যায়।

উদাহরণ: Custom Date Format

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;

class Event {
    private String name;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy HH:mm:ss")
    private Date eventDate;

    // Constructors, Getters, and Setters
    public Event() {}

    public Event(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }

    @Override
    public String toString() {
        return "Event{name='" + name + '\'' + ", eventDate=" + eventDate + '}';
    }
}

public class CustomDateFormatExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        Event event = new Event("Conference", new Date());
        
        // Serialize
        String json = mapper.writeValueAsString(event);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        String eventJson = "{\"name\":\"Conference\",\"eventDate\":\"21-12-2024 15:30:00\"}";
        Event deserializedEvent = mapper.readValue(eventJson, Event.class);
        System.out.println("Deserialized Object: " + deserializedEvent);
    }
}

আউটপুট:

Serialized JSON: {"name":"Conference","eventDate":"21-12-2024 15:30:00"}
Deserialized Object: Event{name='Conference', eventDate=Sat Dec 21 15:30:00 GMT 2024}

Global Date Format সেট করা

ObjectMapper-এর মাধ্যমে পুরো অ্যাপ্লিকেশনে ডেট ফরম্যাট নির্ধারণ করা যায়।

উদাহরণ: Global Date Format

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.util.StdDateFormat;

public class GlobalDateFormatExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        // Global date format
        mapper.setDateFormat(new StdDateFormat());
        
        Date currentDate = new Date();

        // Serialize
        String json = mapper.writeValueAsString(currentDate);
        System.out.println("Serialized JSON: " + json);

        // Deserialize
        Date deserializedDate = mapper.readValue(json, Date.class);
        System.out.println("Deserialized Date: " + deserializedDate);
    }
}

3. Custom Serializer এবং Deserializer

কাস্টম লজিক প্রয়োগ করে ডেট ফরম্যাট হ্যান্ডল করা যায়।

উদাহরণ: Custom Serializer

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

class CustomDateSerializer extends JsonSerializer<Date> {
    private static final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

    @Override
    public void serialize(Date date, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(formatter.format(date));
    }
}

class EventCustom {
    private String name;

    @com.fasterxml.jackson.databind.annotation.JsonSerialize(using = CustomDateSerializer.class)
    private Date eventDate;

    // Constructors, Getters, and Setters
    public EventCustom(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }
}

public class CustomSerializerExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        EventCustom event = new EventCustom("Seminar", new Date());
        String json = mapper.writeValueAsString(event);
        System.out.println("Serialized JSON: " + json);
    }
}

আউটপুট:

{"name":"Seminar","eventDate":"21/12/2024 15:45:00"}

উদাহরণ: Custom Deserializer

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

class CustomDateDeserializer extends JsonDeserializer<Date> {
    private static final SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

    @Override
    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        String date = p.getText();
        try {
            return formatter.parse(date);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

class EventCustomDeserialization {
    private String name;

    @com.fasterxml.jackson.databind.annotation.JsonDeserialize(using = CustomDateDeserializer.class)
    private Date eventDate;

    // Getters, Setters, and toString
    public EventCustomDeserialization() {}
    public EventCustomDeserialization(String name, Date eventDate) {
        this.name = name;
        this.eventDate = eventDate;
    }

    @Override
    public String toString() {
        return "Event{name='" + name + '\'' + ", eventDate=" + eventDate + '}';
    }
}

public class CustomDeserializerExample {
    public static void main(String[] args) throws Exception {
        ObjectMapper mapper = new ObjectMapper();

        String json = "{\"name\":\"Workshop\",\"eventDate\":\"21/12/2024\"}";
        EventCustomDeserialization event = mapper.readValue(json, EventCustomDeserialization.class);
        System.out.println("Deserialized Object: " + event);
    }
}

আউটপুট:

Deserialized Object: Event{name='Workshop', eventDate=Sat Dec 21 00:00:00 GMT 2024}

4. টিপস

  1. ডিফল্ট ফরম্যাট: ISO-8601 ফরম্যাট ব্যবহার করতে হলে কোনো অতিরিক্ত কনফিগারেশনের প্রয়োজন নেই।
  2. কাস্টম ফরম্যাট: অ্যাপ্লিকেশনের প্রয়োজন অনুযায়ী @JsonFormat বা কাস্টম Serializer/Deserializer ব্যবহার করুন।
  3. Time Zones: সময় অঞ্চলের পার্থক্য থাকলে java.time প্যাকেজ (যেমন LocalDateTime, ZonedDateTime) ব্যবহার করা ভালো।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...